home *** CD-ROM | disk | FTP | other *** search
- /* MidpNT.cpp
- *
- * MIDAS Module Player for Windows NT main program file
- *
- * $Id: MidpNT.cpp 1.15 1997/01/25 13:17:44 pekangas Exp $
- *
- * Copyright 1996 Petteri Kangaslampi
- */
-
- #include <windows.h>
- #include <ddeml.h>
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- #include "midpres.h"
- #include "midasdll.h"
- #include "MidpNT.h"
- #include "MidpList.h"
- #include "MidpModeless.h"
- #include "MidpView.h"
- #include "SongInfo.h"
- #include "InstList.h"
- #include "ViewList.h"
- #include "Archivers.h"
- #include "Registry.h"
-
- #define POLLRATE 100
-
- #define NUMLINES 100
- #define MAXLINE 255
-
- #define MIDP_ADDTEXT WM_USER+100
-
- HANDLE instance; /* program instance */
-
- static char *mainWinClass = "midpNTClass"; /* main window class name */
-
- HWND mainWinHandle;
- HWND editWinHandle;
- int editWidth, editHeight;
- HANDLE accelHandle;
-
- static char *textLines[NUMLINES]; /* all text lines */
- static char *text;
- static int numLines;
- static char loadFileName[MAX_PATH + 16]; /* fudge factor */
-
- MIDASmodule module = NULL;
-
- char defaultDir[MAX_PATH];
- char unzipDir[MAX_PATH];
-
- LRESULT CALLBACK mainWindowProc(HWND hwnd, UINT message, WPARAM wparam,
- LPARAM lparam);
- void StartDDEServer(void);
- void PlayFile(char *fileName);
- int PlayDDE(char *fileName);
- void ReadRegistry(void);
- void WriteRegistry(void);
- void RestoreMainWindow(void);
- void SaveViews(void);
- void RestoreViews(void);
-
-
-
- DWORD ddeInstance;
- int ddeInit = 0;
-
- SongInfoView *songInfoView = NULL;
- InstListView *instListView = NULL;
-
- midpList midpModelessList;
- midpViewWindowList viewWindowList;
- midpViewList viewList;
-
- char *iniFile = "MidpNT.ini";
- char *defaultDirectory = "";
-
- char *baseKey = "Software\\Sahara Surfers\\MidpNT";
-
- static int mainWinX, mainWinY, mainWinWidth, mainWinHeight;
-
- int viewsChildren = 1;
-
- int minimalUI = 0;
-
-
-
-
-
-
-
- /****************************************************************************\
- *
- * Function: int WinMain(HANDLE thisInstance, HANDLE prevInstance, LPSTR
- * commandLine, int showCommand);
- *
- * Description: Windows main function - common initialization and message loop
- *
- \****************************************************************************/
-
- int WINAPI WinMain(HANDLE thisInstance, HANDLE prevInstance,
- LPSTR commandLine, int showCommand)
- {
- MSG msg;
- WNDCLASS wc;
- midpModeless *modeless;
- char *c, *d, *end;
- int inQuotes = 0;
- int hadCharacters = 0;
- // char kala[256];
-
- prevInstance = prevInstance;
-
- StartupMIDAS();
-
- // sprintf(kala, "commandLine: \"%s\"", commandLine);
- // MessageBox(NULL, kala, "Kala", MB_OK);
-
- /* Build file name to load: */
- // strcpy(loadFileName, commandLine);
- loadFileName[0] = 0;
- if ( strlen(commandLine) > 0 )
- {
- c = commandLine;
-
- while ( (*c != 0) && (isspace(*c)) )
- c++;
-
- if ( *c == '-' )
- {
- c++;
-
- switch ( *(c++) )
- {
- case 'm':
- minimalUI = 1;
- break;
- }
-
- while ( (*c != 0) && (!isspace(*c)) )
- c++;
- }
-
- d = loadFileName;
- end = d;
-
- while ( *c != 0 )
- {
- if ( *c == '\"' )
- {
- inQuotes ^= 1;
- hadCharacters = 1;
- }
- else
- {
- if ( (*c == ' ') && (!hadCharacters) )
- {
- c++;
- continue;
- }
-
- *(d++) = *c;
-
- if ( inQuotes || (*c != ' ') )
- end = d;
-
- hadCharacters = 1;
- }
- c++;
- }
-
- *end = 0;
- }
-
- // sprintf(kala, "loadFileName: \"%s\"", loadFileName);
- // MessageBox(NULL, kala, "Kala", MB_OK);
-
- instance = thisInstance;
-
- if ( PlayDDE(loadFileName) )
- return 0;
-
- /* This is the first instance - now set up a DDE server: */
- StartDDEServer();
-
- /* Let's be a Very Important Process: */
- SetPriorityClass( GetCurrentProcess(), HIGH_PRIORITY_CLASS);
-
- ReadRegistry();
-
- songInfoView = new SongInfoView;
- viewList.AddView(songInfoView);
- instListView = new InstListView;
- viewList.AddView(instListView);
-
- /* Set up and register window class for the main window: */
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = mainWindowProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = sizeof(DWORD);
- wc.hInstance = instance;
- wc.hIcon = LoadIcon(instance, "MIDP_ICON");
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- //wc.hbrBackground = GetStockObject(WHITE_BRUSH);
- wc.hbrBackground = NULL;
- wc.lpszMenuName = "MAINMENU";
- wc.lpszClassName = mainWinClass;
- if ( RegisterClass(&wc) == 0 )
- return FALSE;
-
- if ( !minimalUI )
- RestoreMainWindow();
- else
- {
- mainWinX = mainWinY = 100;
- mainWinWidth = 320;
- mainWinHeight = 0;
- }
-
- /* Create main window: */
-
- mainWinHandle = CreateWindow(
- mainWinClass, /* class */
- "MIDAS Module Player for Windows NT", /* caption */
- WS_OVERLAPPEDWINDOW, /* style */
- mainWinX, /* init. x pos */
- mainWinY, /* init. y pos */
- mainWinWidth, /* init. x size */
- mainWinHeight, /* init. y size */
- NULL, /* parent window */
- NULL, /* menu handle */
- instance, /* program handle */
- NULL /* create parms */
- );
-
- if ( !mainWinHandle )
- return FALSE;
-
- if ( (accelHandle = LoadAccelerators(instance, "MAINACCELERATORS")) ==
- NULL )
- {
- MessageBox(NULL, "Coulnd't load accelerators", "MidpNT Initialization error",
- MB_OK | MB_ICONEXCLAMATION);
-
- return FALSE;
- }
-
- /* Display main window: */
- ShowWindow(mainWinHandle, showCommand);
- UpdateWindow(mainWinHandle);
-
- if ( !minimalUI )
- RestoreViews();
-
- /* Da Message Loop: */
- while ( GetMessage(&msg, NULL, NULL, NULL) )
- {
- if ( !TranslateAccelerator(mainWinHandle, accelHandle, &msg) )
- {
- modeless = (midpModeless*) midpModelessList.GetFirst();
- while ( modeless != NULL )
- {
- if ( IsDialogMessage(modeless-> hwnd, &msg) )
- break;
- modeless = (midpModeless*) midpModelessList.GetNext();
- }
-
- if ( modeless == NULL )
- {
- TranslateMessage (&msg) ;
- DispatchMessage (&msg) ;
- }
- }
- }
-
- WriteRegistry();
-
- if ( ddeInit )
- DdeUninitialize(ddeInstance);
-
- return(msg.wParam);
- }
-
-
- void RestoreViews(void)
- {
- int i, n;
- Registry reg;
- char s[256];
- char v[64];
- midpViewWindow *win;
- midpView *view;
-
- reg.OpenKey(baseKey);
- n = reg.ValueDWORD("NumViewWindows", 0);
-
- for ( i = 0; i < n; i++ )
- {
- sprintf(s, "%s\\ViewWindow%i", baseKey, i);
-
- if ( reg.KeyExists(s) )
- {
- reg.OpenKey(s);
- reg.ValueString("ViewClass", "none", v, 63);
-
- view = viewList.FindView(v);
- win = view->CreateViewWindow(®);
- }
- }
- }
-
-
-
- void SaveViews(void)
- {
- int i;
- Registry reg;
- char s[256];
- midpViewWindow *win;
-
- reg.OpenKey(baseKey);
- reg.WriteDWORD("NumViewWindows", viewWindowList.NumWindows());
-
- for ( i = 0, win = viewWindowList.GetFirst(); win != NULL; i++,
- win = viewWindowList.GetNext() )
- {
- sprintf(s, "%s\\ViewWindow%i", baseKey, i);
-
- if ( !reg.KeyExists(s) )
- reg.CreateKey(s);
- reg.OpenKey(s);
-
- win->SaveState(®);
- }
- }
-
-
-
-
- void ReadRegistry(void)
- {
- Registry reg;
-
- if ( !reg.KeyExists(baseKey) )
- reg.CreateKey(baseKey);
- else
- reg.OpenKey(baseKey);
-
- reg.ValueString("DefaultDirectory", "c:\\", defaultDir, MAX_PATH);
- reg.ValueString("UnzipDirectory", "c:\\$$MidpNT$$", unzipDir, MAX_PATH);
- viewsChildren = reg.ValueDWORD("OpenViewsAsChildWindows", 1);
- }
-
-
- void WriteRegistry(void)
- {
- Registry reg;
-
- reg.OpenKey("Software\\Sahara Surfers\\MidpNT");
- reg.WriteString("DefaultDirectory", defaultDir);
- reg.WriteString("UnzipDirectory", unzipDir);
- reg.WriteDWORD("OpenViewsAsChildWindows", viewsChildren);
- }
-
-
- void DDEError(char *function, UINT error)
- {
- char msg[128];
- sprintf(msg, "DDE Failure - %s: %u", function, error);
- MessageBox(NULL, msg, "MidpNT Initialization error",
- MB_OK | MB_ICONEXCLAMATION);
- CloseMIDAS();
- ExitProcess(17);
- }
-
-
-
- HDDEDATA CALLBACK DdeServerCallback(
- UINT uType, // transaction type
- UINT uFmt, // clipboard data format
- HCONV hconv, // handle of the conversation
- HSZ hsz1, // handle of a string
- HSZ hsz2, // handle of a string
- HDDEDATA hdata, // handle of a global memory object
- DWORD dwData1, // transaction-specific data
- DWORD dwData2 // transaction-specific data
- )
- {
- int len;
- char *str;
-
- uType = uType;
- uFmt = uFmt;
- hconv = hconv;
- hsz1 = hsz1;
- hsz2 = hsz2;
- hdata = hdata;
- dwData1 = dwData1;
- dwData2 = dwData2;
-
- switch ( uType )
- {
- case XTYP_CONNECT:
- len = DdeQueryString(ddeInstance, hsz1, NULL, 0, CP_WINANSI);
- if ( len == 0 )
- Panic("DdeServerCallback: Topic string length 0");
- str = new char[len+1];
- if ( !DdeQueryString(ddeInstance, hsz1, str, len+1, CP_WINANSI) )
- Panic("DdeServerCallback: DdeQueryString() failed");
-
- if ( !memcmp(str, "PlayFile:", 9) )
- {
- if ( strlen(str) > 9 )
- {
- // AddTextLine(str);
- PlayFile(str+9);
- }
- }
- else
- Panic("DdeServerCallback: Bad topic");
-
- return (HDDEDATA) TRUE;
- }
-
- return (HDDEDATA) 0L;
- }
-
-
-
- void StartDDEServer(void)
- {
- UINT ddeError;
- HSZ strHandle;
-
- if ( (ddeError = DdeInitialize(&ddeInstance, DdeServerCallback,
- APPCLASS_STANDARD, 0)) !=
- DMLERR_NO_ERROR )
- DDEError("Server DdeInitialize", ddeError);
-
- ddeInit = 1;
-
- if ( (strHandle = DdeCreateStringHandle(ddeInstance, "MidpNT",
- CP_WINANSI)) == 0L )
- DDEError("DdeCreateStringHandle", DdeGetLastError(ddeInstance));
-
- if ( DdeNameService(ddeInstance, strHandle, (HSZ) 0L, DNS_REGISTER) == 0 )
- DDEError("DdeNameService", DdeGetLastError(ddeInstance));
-
- if ( !DdeFreeStringHandle(ddeInstance, strHandle) )
- DDEError("DdeFreeStingHandle", DdeGetLastError(ddeInstance));
- }
-
-
-
- HDDEDATA CALLBACK DdeClientCallback(
- UINT uType, // transaction type
- UINT uFmt, // clipboard data format
- HCONV hconv, // handle of the conversation
- HSZ hsz1, // handle of a string
- HSZ hsz2, // handle of a string
- HDDEDATA hdata, // handle of a global memory object
- DWORD dwData1, // transaction-specific data
- DWORD dwData2 // transaction-specific data
- )
- {
- uType = uType;
- uFmt = uFmt;
- hconv = hconv;
- hsz1 = hsz1;
- hsz2 = hsz2;
- hdata = hdata;
- dwData1 = dwData1;
- dwData2 = dwData2;
-
- return (HDDEDATA) 0L;
- }
-
-
-
- int PlayDDE(char *fileName)
- {
- char *str;
- HSZ server, topic;
- HCONV conversation;
- UINT ddeError;
- int val;
- static DWORD ddeInstance;
- char *dummy;
-
- if ( strlen(fileName) )
- {
- str = new char[_MAX_PATH + 10];
- strcpy(str, "PlayFile:");
- /*
- if ( _fullpath(str+9, fileName, _MAX_PATH) == NULL )
- Panic("PlayDDE(): _fullpath failed");
- */
- if ( GetFullPathName(fileName, _MAX_PATH, str+9, &dummy) == 0 )
- Panic("PlayDDE(): GetFullPathName() failed");
- }
- else
- str = "PlayFile:";
-
- if ( (ddeError = DdeInitialize(&ddeInstance, DdeClientCallback,
- APPCLASS_STANDARD | APPCMD_CLIENTONLY, 0)) !=
- DMLERR_NO_ERROR )
- DDEError("Client DdeInitialize", ddeError);
-
- ddeInit = 1;
-
- if ( (server = DdeCreateStringHandle(ddeInstance, "MidpNT",
- CP_WINANSI)) == 0L )
- DDEError("DdeCreateStringHandle", DdeGetLastError(ddeInstance));
-
- if ( (topic = DdeCreateStringHandle(ddeInstance, str,
- CP_WINANSI)) == 0L )
- DDEError("DdeCreateStringHandle", DdeGetLastError(ddeInstance));
-
- if ( (conversation = DdeConnect(ddeInstance, server, topic, NULL)) == 0L )
- {
- ddeError = DdeGetLastError(ddeInstance);
- if ( ddeError == DMLERR_NO_CONV_ESTABLISHED )
- val = 0;
- else
- DDEError("DdeConnect", ddeError);
- }
- else
- {
- val = 1;
-
- if ( !DdeDisconnect(conversation) )
- DDEError("DdeDisconnect", DdeGetLastError(ddeInstance));
- }
-
- if ( !DdeFreeStringHandle(ddeInstance, server) )
- DDEError("DdeFreeStingHandle", DdeGetLastError(ddeInstance));
- if ( !DdeFreeStringHandle(ddeInstance, topic) )
- DDEError("DdeFreeStingHandle", DdeGetLastError(ddeInstance));
-
- DdeUninitialize(ddeInstance);
- ddeInit = 0;
-
- return val;
- }
-
-
-
-
-
-
-
- void Panic(char *message)
- {
- MessageBox(NULL, message, "MIDP PANIC",
- MB_OK | MB_ICONEXCLAMATION);
- CloseMIDAS();
- if ( ddeInit )
- DdeUninitialize(ddeInstance);
- ExitProcess(1);
- }
-
-
-
- char *FileNameFilters =
- "All Modules\0*.mod;*.s3m;*.xm;*.mdz;*.s3z;*.xmz\0"
- "All Files\0*.*\0"
- "Unpacked Modules\0*.mod;*.s3m;*.xm\0"
- "Packed Modules\0*.mdz;*.s3z;*.xmz;*.zip\0"
- "\0\0";
-
-
- char *GetFileName(char *windowTitle)
- {
- static OPENFILENAME *ofn = NULL;
- DWORD error;
-
- if ( ofn == NULL )
- {
- if ( (ofn = (OPENFILENAME*) malloc(sizeof(OPENFILENAME))) == NULL )
- return NULL;
-
- ofn->lStructSize = sizeof(OPENFILENAME);
- ofn->hwndOwner = 0;
- ofn->hInstance = 0;
- ofn->lpstrFilter = (LPCSTR) FileNameFilters;
- ofn->lpstrCustomFilter = NULL;
- ofn->nMaxCustFilter = 0;
- ofn->nFilterIndex = 1;
- if ( (ofn->lpstrFile = (char*) malloc(1024)) == NULL )
- {
- ofn = NULL;
- return NULL;
- }
- memset(ofn->lpstrFile, 0, 1024);
- ofn->nMaxFile = 1023;
- ofn->lpstrFileTitle = NULL;
- ofn->nMaxFileTitle = 0;
- ofn->lpstrInitialDir = defaultDir; //!
- ofn->lpstrTitle = windowTitle;
- ofn->nFileOffset = 0;
- ofn->nFileExtension = 0;
- ofn->lpstrDefExt = 0;
- ofn->Flags = OFN_EXPLORER;
- }
- else
- ofn->lpstrInitialDir = NULL;
-
- ofn->lpstrTitle = windowTitle;
-
- if ( GetOpenFileName(ofn) == FALSE )
- {
- error = CommDlgExtendedError();
- return NULL;
- }
-
- return ofn->lpstrFile;
- }
-
-
- void ShowTextBottom(void)
- {
- int firstVisible;
- int lines;
- int newFirst;
- int textAreaHeight;
- int visibleLines;
- HFONT oldFont, font;
- HDC hdc;
- TEXTMETRIC textMetric;
-
- font = (HFONT) SendMessage(editWinHandle, WM_GETFONT, 0, 0);
- firstVisible = (int) SendMessage(editWinHandle, EM_GETFIRSTVISIBLELINE, 0, 0);
- lines = (int) SendMessage(editWinHandle, EM_GETLINECOUNT, 0, 0);
- textAreaHeight = editHeight - GetSystemMetrics(SM_CYHSCROLL);
-
- hdc = GetDC(editWinHandle);
- oldFont = SelectObject(hdc, font);
- if ( GetTextMetrics(hdc, &textMetric) == FALSE )
- return; /* FIXME */
- SelectObject(hdc, oldFont);
-
- if ( textMetric.tmHeight > 0 )
- visibleLines = textAreaHeight / textMetric.tmHeight;
- else
- visibleLines = 1;
-
- newFirst = lines - visibleLines - 1;
- if ( newFirst < 0 )
- newFirst = 0;
- if ( newFirst > (lines-1) )
- newFirst = lines-1;
-
- SendMessage(editWinHandle, EM_LINESCROLL, 0, newFirst - firstVisible);
- }
-
-
-
-
- void BuildText(void)
- {
- int i;
-
- text[0] = 0;
- for ( i = 0; i < numLines; i++ )
- {
- strcat(text, textLines[i]);
- strcat(text, "\r\n");
- }
- }
-
-
-
- void AddTextLine(char *textLine)
- {
- int i;
- char *temp;
-
- if ( numLines == NUMLINES )
- {
- temp = textLines[0];
- for ( i = 0; i < (NUMLINES - 1); i++ )
- textLines[i] = textLines[i+1];
- textLines[NUMLINES-1] = temp;
- numLines--;
- }
-
- strncpy(textLines[numLines], textLine, MAXLINE);
- numLines++;
-
- BuildText();
-
- SendMessage(editWinHandle, WM_SETREDRAW, (WPARAM) FALSE, 0);
- SendMessage(editWinHandle, WM_SETTEXT, 0, (LPARAM) text);
- ShowTextBottom();
- SendMessage(editWinHandle, WM_SETREDRAW, (WPARAM) TRUE, 0);
- InvalidateRect(editWinHandle, NULL, FALSE);
- UpdateWindow(editWinHandle);
- }
-
-
-
-
- void InitText(void)
- {
- int i;
-
- text = (char*) malloc(NUMLINES * (MAXLINE+1));
- text[0] = 0;
-
- for ( i = 0; i < NUMLINES; i++ )
- {
- textLines[i] = (char*) malloc(MAXLINE+1);
- textLines[i][0] = 0;
- }
- }
-
-
-
- #define NUMMIXRATES 8
- int mixRates[NUMMIXRATES] =
- { 8000, 11025, 16000, 22050, 28000, 32000, 38000, 44100 };
-
- BOOL CALLBACK SoundOptionsDialogProc(HWND hwnd, UINT message, WPARAM wparam,
- LPARAM lparam)
- {
- char strBuffer[32];
- int i;
-
- lparam = lparam; // get rid of a stupid warning
-
- switch ( message )
- {
- case WM_INITDIALOG:
- for ( i = 0; i < NUMMIXRATES; i++ )
- {
- itoa(mixRates[i], strBuffer, 10);
- SendDlgItemMessage(hwnd, SOUNDOPTIONS_MIXRATE, CB_ADDSTRING,
- 0, (LPARAM) strBuffer);
- }
- SendDlgItemMessage(hwnd, SOUNDOPTIONS_STEREO, BM_SETCHECK,
- (WPARAM) stereo, 0);
- SendDlgItemMessage(hwnd, SOUNDOPTIONS_8BIT, BM_SETCHECK,
- (WPARAM) force8bit, 0);
-
- for ( i = 0; i < NUMMIXRATES; i++ )
- {
- if ( mixRates[i] == mixRate )
- {
- SendDlgItemMessage(hwnd, SOUNDOPTIONS_MIXRATE,
- CB_SETCURSEL, i, 0);
- break;
- }
- }
-
- itoa(500, strBuffer, 10);
- SendDlgItemMessage(hwnd, SOUNDOPTIONS_BUFFERSIZE, WM_SETTEXT, 0,
- (LPARAM) strBuffer);
-
- itoa(16, strBuffer, 10);
- SendDlgItemMessage(hwnd, SOUNDOPTIONS_BUFFERBLOCKS, WM_SETTEXT, 0,
- (LPARAM) strBuffer);
-
- return TRUE;
-
- case WM_COMMAND:
- switch ( LOWORD(wparam) )
- {
- case IDOK:
- SendDlgItemMessage(hwnd, SOUNDOPTIONS_MIXRATE,
- WM_GETTEXT, 31, (LPARAM) strBuffer);
- if ( atoi(strBuffer) != 0 )
- mixRate = atoi(strBuffer);
- stereo = SendDlgItemMessage(hwnd, SOUNDOPTIONS_STEREO,
- BM_GETCHECK, 0, 0);
- force8bit = SendDlgItemMessage(hwnd,
- SOUNDOPTIONS_8BIT, BM_GETCHECK, 0, 0);
-
- MIDASsetOption(MIDAS_OPTION_MIXRATE, mixRate);
-
- if ( stereo )
- {
- if ( force8bit )
- MIDASsetOption(MIDAS_OPTION_OUTPUTMODE,
- MIDAS_MODE_8BIT_STEREO);
- else
- MIDASsetOption(MIDAS_OPTION_OUTPUTMODE,
- MIDAS_MODE_16BIT_STEREO);
- }
- else
- {
- if ( force8bit )
- MIDASsetOption(MIDAS_OPTION_OUTPUTMODE,
- MIDAS_MODE_8BIT_MONO);
- else
- MIDASsetOption(MIDAS_OPTION_OUTPUTMODE,
- MIDAS_MODE_16BIT_MONO);
- }
-
- SendDlgItemMessage(hwnd, SOUNDOPTIONS_BUFFERSIZE,
- WM_GETTEXT, 31, (LPARAM) strBuffer);
- if ( atoi(strBuffer) != 0 )
- MIDASsetOption(MIDAS_OPTION_MIXBUFLEN,
- atoi(strBuffer));
-
- SendDlgItemMessage(hwnd, SOUNDOPTIONS_BUFFERBLOCKS,
- WM_GETTEXT, 31, (LPARAM) strBuffer);
- if ( atoi(strBuffer) != 0 )
- MIDASsetOption(MIDAS_OPTION_MIXBUFBLOCKS,
- atoi(strBuffer));
-
- EndDialog(hwnd, 0);
- return TRUE;
-
- case IDCANCEL:
- EndDialog(hwnd, 0);
- return TRUE;
- }
- }
-
- return FALSE;
- }
-
-
-
- void SoundOptions(void)
- {
- DialogBox(instance, "SOUNDOPTIONS", mainWinHandle, (DLGPROC)
- &SoundOptionsDialogProc);
- }
-
-
- BOOL CALLBACK PreferencesDialogProc(HWND hwnd, UINT message, WPARAM wparam,
- LPARAM lparam)
- {
- lparam = lparam; // get rid of a stupid warning
-
- switch ( message )
- {
- case WM_INITDIALOG:
- SendDlgItemMessage(hwnd, PREFERENCES_DEFAULTDIR, WM_SETTEXT,
- 0, (LPARAM) defaultDir);
- SendDlgItemMessage(hwnd, PREFERENCES_UNZIPDIR, WM_SETTEXT,
- 0, (LPARAM) unzipDir);
- SendDlgItemMessage(hwnd, PREFERENCES_VIEWSCHILDREN, BM_SETCHECK,
- (WPARAM) viewsChildren, 0);
- return TRUE;
-
- case WM_COMMAND:
- switch ( LOWORD(wparam) )
- {
- case IDOK:
- SendDlgItemMessage(hwnd, PREFERENCES_DEFAULTDIR,
- WM_GETTEXT, MAX_PATH - 1, (LPARAM) defaultDir);
- SendDlgItemMessage(hwnd, PREFERENCES_UNZIPDIR,
- WM_GETTEXT, MAX_PATH - 1, (LPARAM) unzipDir);
- viewsChildren = SendDlgItemMessage(hwnd,
- PREFERENCES_VIEWSCHILDREN, BM_GETCHECK, 0, 0);
- EndDialog(hwnd, 0);
- return TRUE;
-
- case IDCANCEL:
- EndDialog(hwnd, 0);
- return TRUE;
- }
- }
-
- return FALSE;
- }
-
-
-
- void PlayFile(char *fileName)
- {
- if ( module != NULL )
- {
- StopFreeModule(module);
- module = NULL;
- }
-
- if ( IsArchive(fileName) )
- {
- module = LoadArchive(fileName);
-
- if ( module != NULL )
- PlayModule(module);
- }
- else
- {
- module = LoadModule(fileName);
-
- if ( module != NULL )
- PlayModule(module);
- }
-
- viewWindowList.SongChanged();
- }
-
-
- void RestoreMainWindow(void)
- {
- Registry reg;
-
- reg.OpenKey(baseKey);
-
- if ( reg.ValueExists("MainWindowX") )
- {
- mainWinX = reg.ValueDWORD("MainWindowX", 100);
- mainWinY = reg.ValueDWORD("MainWindowY", 100);
- mainWinWidth = reg.ValueDWORD("MainWindowWidth", 200);
- mainWinHeight = reg.ValueDWORD("MainWindowHeight", 200);
- }
- else
- mainWinX = mainWinY = mainWinWidth = mainWinHeight = CW_USEDEFAULT;
- }
-
-
- void SaveMainWindow(void)
- {
- Registry reg;
- RECT rect;
-
- reg.OpenKey(baseKey);
-
- GetWindowRect(mainWinHandle, &rect);
- reg.WriteDWORD("MainWindowX", rect.left);
- reg.WriteDWORD("MainWindowY", rect.top);
- reg.WriteDWORD("MainWindowWidth", rect.right - rect.left);
- reg.WriteDWORD("MainWindowHeight", rect.bottom - rect.top);
- }
-
-
-
- void ListInstruments(void)
- {
- char str[256];
- unsigned i;
- MIDASmoduleInfo moduleInfo;
- MIDASinstrumentInfo instrumentInfo;
-
- if ( module != NULL )
- {
- MIDASgetModuleInfo(module, &moduleInfo);
-
- for ( i = 0; i < moduleInfo.numInstruments; i++ )
- {
- MIDASgetInstrumentInfo(module, i, &instrumentInfo);
- sprintf(str, "%02X: %s", i + 1, instrumentInfo.instName);
- AddTextLine(str);
- }
- }
- }
-
-
-
-
-
-
- /****************************************************************************\
- *
- * Function: LRESULT mainWindowProc(HWND hwnd, UINT message, WPARAM wparam,
- * LPARAM lparam);
- *
- * Description: Main window message processing function
- *
- \****************************************************************************/
-
- LRESULT CALLBACK mainWindowProc(HWND hwnd, UINT message, WPARAM wparam,
- LPARAM lparam)
- {
- char *fileName;
- int i;
- char aboutText[256];
- MIDASplayStatus playStatus;
- MIDASmoduleInfo moduleInfo;
-
- switch ( message )
- {
- case WM_CREATE:
- /* Create edit box for console text: */
- editWinHandle = CreateWindow(
- "EDIT", /* Window class */
- NULL, /* Window title */
- WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_LEFT |
- ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL |
- ES_READONLY,
- 0, 0, 0, 0, /* set size in WM_SIZE message */
- hwnd, /* parent window */
- (HMENU) ID_EDIT, /* edit control ID */
- instance,
- NULL); /* no window creation data */
-
- mainWinHandle = hwnd;
-
- editWidth = editHeight = 0;
-
- /* Initialize text: */
- InitText();
-
- // AddTextLine("MIDAS Module Player for Windows NT initialized");
- // AddTextLine("");
- AddTextLine("MIDAS Module Player for Windows NT");
- AddTextLine("Copyright 1996,1997 Petteri Kangaslampi");
- AddTextLine("Version " FULLVERSTR ", built " __DATE__ ".");
- AddTextLine("");
- sprintf(aboutText, "Using MIDAS Sound System v%s,",
- MIDASgetVersionString());
- AddTextLine(aboutText);
- AddTextLine("Copyright 1996,1997 Housemarque Inc.");
-
- AddTextLine("");
-
- /* Set edit control text: */
- SendMessage(editWinHandle, WM_SETTEXT, 0, (LPARAM) text);
-
- InitMIDAS();
-
- AddTextLine("MIDAS Sound System initialized");
-
- if ( strlen(loadFileName) != 0 )
- PlayFile(loadFileName);
-
- break;
-
- case WM_SIZE:
- /* Make the edit control the size of the window's client area: */
- MoveWindow(editWinHandle,
- 0, 0, /* starting x- and y-coordinates */
- LOWORD(lparam), /* width of client area */
- HIWORD(lparam), /* height of client area */
- TRUE); /* repaint window */
- editWidth = LOWORD(lparam);
- editHeight = HIWORD(lparam);
- ShowTextBottom();
- return 0;
-
- case WM_COMMAND:
- switch ( LOWORD(wparam) )
- {
- case MENU_FILE_OPEN:
- fileName = GetFileName("Open File");
- if ( fileName != NULL )
- PlayFile(fileName);
- break;
-
- case MENU_FILE_CLOSE:
- if ( module != NULL )
- {
- StopFreeModule(module);
- module = NULL;
- }
- viewWindowList.SongChanged();
- break;
-
- case MENU_FILE_EXIT:
- DestroyWindow(hwnd);
- break;
-
- case MENU_OPTIONS_SOUND:
- if ( module != NULL )
- {
- StopFreeModule(module);
- module = NULL;
- }
- viewWindowList.SongChanged();
- CloseMIDAS();
- SoundOptions();
- InitMIDAS();
- break;
-
- case MENU_VIEWS_SONGINFO:
- songInfoView->CreateViewWindow();
- break;
-
- case MENU_VIEWS_INSTLIST:
- instListView->CreateViewWindow();
- break;
-
- case MENU_PLAYING_NEXTPOSITION:
- if ( module != NULL )
- {
- MIDASgetPlayStatus(&playStatus);
- MIDASgetModuleInfo(module, &moduleInfo);
- if ( playStatus.position < (moduleInfo.songLength-1) )
- MIDASsetPosition(playStatus.position + 1);
- }
- break;
-
- case MENU_PLAYING_PREVPOSITION:
- if ( module != NULL )
- {
- MIDASgetPlayStatus(&playStatus);
- MIDASgetModuleInfo(module, &moduleInfo);
- if ( playStatus.position > 0 )
- MIDASsetPosition(playStatus.position - 1);
- }
- break;
-
- case MENU_PLAYING_CENTERCHANNELS:
- if ( module != NULL )
- {
- MIDASgetModuleInfo(module, &moduleInfo);
- for ( i = 0; i < (int) moduleInfo.numChannels; i++ )
- {
- /* Kluge: */
- if ( !MIDASsetSamplePanning(
- (MIDASsamplePlayHandle) i + 1,
- MIDAS_PAN_MIDDLE))
- MIDASerror();
- }
- }
- break;
-
- case MENU_OPTIONS_PREFERENCES:
- DialogBox(instance, "PREFERENCES", hwnd, (DLGPROC)
- &PreferencesDialogProc);
- break;
-
- case MENU_HELP_ABOUT:
- sprintf(aboutText, "MIDAS Module Player for "
- "Windows NT\nCopyright 1996,1997 Petteri Kangaslampi\n"
- "Version " FULLVERSTR ", built " __DATE__ ".\n\n"
- "Using MIDAS Sound System v%s\n"
- "Copyright 1996,1997 Housemarque Inc.",
- MIDASgetVersionString());
- MessageBox(mainWinHandle, aboutText, "About MidpNT",
- MB_OK | MB_ICONINFORMATION);
- break;
-
- case MENU_OPTIONS_SAVE_WIN:
- SaveViews();
- SaveMainWindow();
- break;
-
- case MENU_OPTIONS_RESTORE_WIN:
- RestoreViews();
- RestoreMainWindow();
- break;
-
- case MENU_PLAYING_LIST_INSTRUMENTS:
- ListInstruments();
- break;
- }
- break;
-
- case WM_DESTROY:
- CloseMIDAS();
- PostQuitMessage(0);
- break;
-
- default:
- return(DefWindowProc(hwnd, message, wparam, lparam));
- }
-
- return 0;
- }
-
-
-
- /*
- * $Log: MidpNT.cpp $
- * Revision 1.15 1997/01/25 13:17:44 pekangas
- * Rewrote archive support, added an icon
- *
- * Revision 1.14 1997/01/17 17:51:53 pekangas
- * Fixed a Visual C warning
- *
- * Revision 1.13 1997/01/17 17:41:35 pekangas
- * Text is also added to main window when in minimal UI mode
- * (it's not usually visible though)
- *
- * Revision 1.12 1997/01/17 00:08:23 pekangas
- * Added minimal UI mode - command line switch "-m"
- *
- * Revision 1.11 1997/01/14 22:25:11 pekangas
- * Finally fixed (?) all command line arguments with spaces
- *
- * Revision 1.10 1997/01/14 20:47:40 pekangas
- * Fixed channel centering (a stupid off-by-one error)
- *
- * Revision 1.9 1997/01/14 17:42:08 pekangas
- * Changed to use MIDAS DLL API
- *
- * Revision 1.8 1997/01/14 16:36:14 pekangas
- * Fixed support for files names with spaces as command line arguments
- *
- * Revision 1.7 1996/08/03 13:06:08 pekangas
- * Added 1 to "view instruments" instrument numbers
- *
- * Revision 1.6 1996/08/02 20:14:30 pekangas
- * Added View Instruments -function
- *
- * Revision 1.5 1996/07/16 20:20:01 pekangas
- * Added an error message if loading accelerators fails
- * (this happens if resources are not found)
- *
- * Revision 1.4 1996/07/16 19:11:59 pekangas
- * Fixed WinMain definition for Visual C
- *
- * Revision 1.3 1996/07/04 17:48:41 pekangas
- * Converted to LFs
- *
- */